1、组件的继承
通过组件的继承我们可以利用已定义的组件的一些特性。首先先看第一种定义的方式:
1 | import Vue from 'vue' |
在这个里面,CompVue继承了名为component这样的一个组件,并且在里面实现了自己的一些方法。首先,如果这个时候需要和被继承组件中的子组件通信的时候,需要利用propsData进行传递,利用原来的props是没有效果的。然后就是在继承的组件当中,data会自动覆盖掉原先的data。但是对于mounted而言是不会被覆盖的,而是先执行被继承对象中的mounted方法,再调用自己的mounted方法。
当然,还有一种定义继承的方式:
1 | const comp2 = { |
二、组件的parent
利用$parent这个变量可以找到一个组件的父组件,并且通过this. $parent.$options.name可以查到他父组件的名字。
1 | const comp2 = { |
当然,也可以通过$parent来改变响应的值。但是尽量不要去这样做。父组件也是可以进行设置的:
1 | const parent = new Vue({ |
这样声明是没有用的,结果还将是parent为调用该组件的名称,这时候想要定义父组件必须在new一个Vue的时候声明才有效果。
接下来看一个多层调用的例子:
1 | import Vue from 'vue' |
但是是没有办法访问越级的组件的,这个时候就需要去做一些处理。
首先在”爷爷辈“的组件中,声明一个provide方法,这样才会在Vue对象初始化的过程中得到里面的值。
1 | provide(){ |
然后在”孙子辈“里面再去利用inject调用:
1 | const childComponents = { |
但是这时候,如果在input中输入一个数的话,孙子中绑定的值是不会变化的,这是因为默认情况下provide是不提供Vue的react属性的,可以做下面的处理:
1 | provide(){ |
也就是子组件在每次访问value这个属性的时候,实际上是在访问get方法,然后访问到value值的变化,这也就是Vue实现的一个原理,但是Vue官方文档中可能之后会被移除。